google.maps.event.addDomListener(window, 'load', initialize);

var map;
var geocoder;
var marker;
var pos;
var zoom;
var markersArray = [];
var markersArrayEstados = [];
var markersArrayCidades = [];
var infoBubbleArray = [];
var infoBubbleArrayEstados = [];
var infoBubbleArrayCidades = [];
var viewport;
var canvasProjectionOverlay;
var x_info_offset = 0, y_info_offset = -100, open_info_window = null;
var zoomEstado = 7;
var zoomCidade = 10;

var markerAluguel = [];
var markerVenda = [];
var markerTemporada = [];
var markerLancamento = [];

var markerApartamento = [];
var markerBoxGaragem = [];
var markerCasa = [];
var markerCasaComercial = [];
var markerCasaCondominio = [];
var markerCasaVila = [];
var markerChacara = [];
var markerConjuntoComercialSala = [];
var markerEventos = [];
var markerFazenda = [];
var markerFlatAparthotel = [];
var markerGalpaoDepositoArmazem = [];
var markerHaras = [];
var markerHotel = [];
var markerIndustria = [];
var markerKitchenette = [];
var markerLoft = [];
var markerLojaSalao = [];
var markerLojaShopping = [];
var markerLoteamento = [];
var markerMotel = [];
var markerPousadaChale = [];
var markerSitio = [];
var markerStudio = [];
var markerTerreno = [];

function initialize() {

	geocoder = new google.maps.Geocoder();
	
	if(localizacaoURL != ""){
		
		geocoder.geocode( { 'address': localizacaoURL}, function(results, status) {
			if (status == google.maps.GeocoderStatus.OK) {

				var mapOptions = {
					center : results[0].geometry.location,
					zoom : 8,
					panControl : false,
					zoomControl : true,
					mapTypeControl : false,
					scaleControl : false,
					streetViewControl : true,
					overviewMapControl : false,
					mapTypeId : google.maps.MapTypeId.ROADMAP
				};
				
				// Ajuste automatico do zoom
				viewport = results[0].geometry.viewport;
				
				createMap(mapOptions);
				
			} else {
				alert('Geocode was not successful for the following reason: ' + status);
			}
	    });
		
	}else{
	
		// Posiçao inicial do google maps (Brasil)
		pos = new google.maps.LatLng(-14.604847, -47.197266);
		zoom = 4;
	
		var mapOptions = {
				center : pos,
				zoom : zoom,
				panControl : false,
				zoomControl : true,
				mapTypeControl : false,
				scaleControl : false,
				streetViewControl : true,
				overviewMapControl : false,
				mapTypeId : google.maps.MapTypeId.ROADMAP
			};
			
		createMap(mapOptions);
	}

}

function createMap(mapOptions){
	map = new google.maps.Map(document.getElementById("map_canvas"), mapOptions);
	
	// Ajusta o zoom quando carrega automatico a localizacao atraves da url
	if(localizacaoURL != ""){
		map.fitBounds(viewport);
	}else{
		// nao esta em pagina de estado/cidade/bairro, e tb nao detectou a localizacao pelo IP
		// entao usa o geocode
		// Verifica se o navegador possui geolocation (exibe o local que o usuario esta)
		if (navigator.geolocation) {
			navigator.geolocation.getCurrentPosition(function(position) {
				// Se tiver geolocation abre o mapa em sua localizacao
				pos = new google.maps.LatLng(position.coords.latitude,
						position.coords.longitude);
				zoom = 14;
	
				map.setCenter(pos);
				map.setZoom(zoom);
				
			}, function() {
				
			});
		}
	}
	
	// Aguarda 3 segundos para carregar o mapa primeiro, e dps carrega os imoveis
	window.setTimeout(function() {
		google.maps.event.addListener(map, 'idle', function() {
			
			$('#mapmessage').show();
			// Quando mexe no mapa, recarrega os imoveis
			
			if(map.getZoom() <= zoomEstado){
				
				deleteAllOverlays();
				deleteAllOverlaysCidades();
				
				deleteOverlaysEstados();
				getQuantidadeImoveisPorEstado();
			}else if(map.getZoom() > zoomEstado && map.getZoom() <= zoomCidade){
				
				deleteAllOverlays();
				deleteAllOverlaysEstados();
				
				deleteOverlaysCidades();
				getQuantidadeImoveisPorCidade();
			}else{
				deleteAllOverlaysCidades();
				deleteAllOverlaysEstados();
				
				deleteOverlays();
				getProperties();
			}
		});
		
		// Verifica se esta em pagina de estado ou cidade, e carrega apropriadamente os markers
		if(tipoPagina == "estado"){
			// carrega os markers de cidade
			getQuantidadeImoveisPorCidade();
			
			// define o zoom apropriado
			if(map.getZoom() > zoomEstado){
				zoomEstado = map.getZoom();
				
				if(zoomEstado >= zoomCidade){
					zoomCidade = zoomEstado + 1;
				}
			}else if(map.getZoom() < zoomEstado){
				zoomEstado = map.getZoom() - 1;
			}
			
			
		}else if(tipoPagina == "cidade"){
			// carrega os markers de imovel
			getProperties();
			
			// define o zoom apropriado
			if(map.getZoom() < zoomCidade){
				zoomCidade = map.getZoom() - 1;
				
				if(zoomCidade <= zoomEstado ){
					zoomEstado = zoomCidade - 1;
				}
			}
			
			
		}else{
			if(map.getZoom() <= zoomEstado){
				getQuantidadeImoveisPorEstado();
			}else if(map.getZoom() > zoomEstado && map.getZoom() <= zoomCidade){
				getQuantidadeImoveisPorCidade();
			}else{
				getProperties();
			}
		}
		
		// verifica se esta em pagina de categoria/intencao e exibe os markers respectivos
		// e define os checkbox do filtro
		if(categoria != "" && categoria != "imoveis"){
			hideOverlays();
			showOverlaysCategoria(categoria);
			$(".checkboxcategoria").attr("checked", false);
			$(".checkboxcategoria[value='"+categoria+"']").prop("checked", true);
		}
		
	}, 3000);
	
	init_canvas_projection();
	
}

function getQuantidadeImoveisPorEstado(){
	cat = "";
	if(categoria != "imoveis")
		cat = categoria;
	
	
	$.ajax({
		type : "POST",
		url : "/getQuantidadeImoveisPorEstadoPorLatLong",
		data : {
			northEastLat : map.getBounds().getNorthEast().lat(),
			northEastLong : map.getBounds().getNorthEast().lng(),
			southWestLat : map.getBounds().getSouthWest().lat(),
			southWestLong : map.getBounds().getSouthWest().lng(),
			categoria : cat,
			intencao : intencao
		}
	}).done(function(msg) {
		var estados = eval ("(" + msg + ")");
		
		for (i in estados){
			addMarkerEstados(estados[i]);
		}
		
		showOverlays(markersArrayEstados);
		
		$('#mapmessage').hide();
	});
}

function getQuantidadeImoveisPorCidade(){
	
	cat = "";
	if(categoria != "imoveis")
		cat = categoria;
	
	$.ajax({
		type : "POST",
		url : "/getQuantidadeImoveisPorCidadePorLatLong",
		data : {
			northEastLat : map.getBounds().getNorthEast().lat(),
			northEastLong : map.getBounds().getNorthEast().lng(),
			southWestLat : map.getBounds().getSouthWest().lat(),
			southWestLong : map.getBounds().getSouthWest().lng(),
			categoria : cat,
			intencao : intencao
		}
	}).done(function(msg) {
		var cidades = eval ("(" + msg + ")");
		
		for (i in cidades){
			addMarkerCidades(cidades[i]);
		}
		
		showOverlays(markersArrayCidades);
		
		$('#mapmessage').hide();
	});
}

function getProperties() {
	
	cat = "";
	if(categoria != "imoveis")
		cat = categoria;
	
	$.ajax({
		type : "POST",
		url : "/getImoveisPorLatLong",
		data : {
			northEastLat : map.getBounds().getNorthEast().lat(),
			northEastLong : map.getBounds().getNorthEast().lng(),
			southWestLat : map.getBounds().getSouthWest().lat(),
			southWestLong : map.getBounds().getSouthWest().lng(),
			categoria : cat,
			intencao : intencao
		}
	}).done(function(msg) {
		var imoveis = eval ("(" + msg + ")");
		
		for (i in imoveis){
			addMarker(imoveis[i]);
		}
		
		$('#mapmessage').hide();
	});
}


function addMarker(imovel) {
	
	var location = new google.maps.LatLng(imovel.lat, imovel.lng);
	var title = imovel.title;
	var endereco = imovel.endereco;
	var telefone = imovel.telefone;
	var celular = imovel.celular;
	var dormitorios = imovel.dormitorios;
	var banheiros = imovel.banheiros;
	var email = imovel.email;
	
	var existe = false;
	//Verifica se o marker ja esta no mapa
	if (markersArray) {
		for (i in markersArray) {
			var m = markersArray[i];
			if(m.getPosition().lat() == location.lat() && m.getPosition().lng() == location.lng()){
				existe = true;
				break;
			}
		}
	}
	
	// Se nao estiver adiciona o marker
	if(!existe){
		
		var image = "/images/markers/marker.png";
			/*if(imovel.tipo == "apartamento" || imovel.tipo == "casa" || imovel.tipo == "casa-de-condominio" || imovel.tipo == "conjunto-comercial-sala" || imovel.tipo == "hotel" || imovel.tipo == "terreno"){
				image = "/images/markers/"+imovel.tipo+"-marker.png";
			}else{
				image = "/images/markers/outros-marker.png";
			}*/
		
		var marker = new google.maps.Marker({
			position : location,
			map : map,
			icon : image,
			shadow : "/images/shadow-marker.png",
			title : "Clique para ver as informações do imóvel"
		});
		
		var detalhes = '<div style="text-align: center; font-size:14px;">'
			+ '<p>' + title + '</p>'
			+ '<p>' + endereco + '</p>'
			+ '<p>Dor.: ' + dormitorios + ' / Ban.: ' + banheiros + '</p>'
			+ '</div>';
		
		var telefoneStr = "";
		if(telefone != null && telefone != "")
			telefoneStr = '<p>Telefone: ' + telefone + '</p>';
		
		var celularStr = "";
		if(celular != null && celular != "")
			celularStr = '<p>Celular: ' + celular + '</p>';
		
		var contato = '<div style="text-align: center; font-size:14px;">';
		
		if(telefoneStr != "")
			contato += telefoneStr;

		if(celularStr != "")
			contato += celularStr;
		
		contato	+= '<p>' + email + '</p>';
		contato	+= '</div>';
		
		/*var infowindow = new google.maps.InfoWindow({
            content: content
        });
		
		google.maps.event.addListener(marker, 'click', function(e) {

			infowindow.open(map,marker);
			
		});*/
		
		var infoBubble = new InfoBubble({
          maxWidth: 300,
          minWidth: 300,
          disableAutoPan : true,
          borderRadius: 0
        });
		
		//infoBubble.open(map, marker);
		
        infoBubble.addTab('Detalhes', detalhes);
        infoBubble.addTab('Contato', contato);
        
        google.maps.event.addListener(marker, 'click', function() {
            if (!infoBubble.isOpen()) {
//            	for(i in infoBubbleArray){
//            		var infoB = infoBubbleArray[i];
//            		infoB.close();
//            	}
            	
            	if (open_info_window)
    				open_info_window.close();
    			if (!infoBubble.isOpen()) {
    				infoBubble.open(map, marker);
    				map.panTo(convert_offset(this.position, x_info_offset, y_info_offset));
    				open_info_window = infoBubble;
    			}
            	
            	//infoBubble.open(map, marker);
            	//map.panTo(convert_offset(this.position, x_info_offset, y_info_offset));
            }
        });

		markersArray.push(marker);
		infoBubbleArray.push(infoBubble);
		
		// Adiciona o marker nos vetores de categoria e intencao para o Filtro
		adicionarMarkerCategoria(marker, imovel.categoria);
		adicionarMarkerIntencao(marker, imovel.intencao);
	}
	
	showOverlays(markersArray);
}

function addMarkerEstados(estado) {
	
	var location = new google.maps.LatLng(estado.lat, estado.lng);
	var nome = estado.nome;
	var nomeURL = estado.nomeURL;
	var uf = estado.uf;
	var quantidade = estado.quantidade;
	
	var existe = false;
	//Verifica se o marker ja esta no mapa
	if (markersArrayEstados) {
		for (i in markersArrayEstados) {
			var m = markersArrayEstados[i];
			if(m.getPosition().lat() == location.lat() && m.getPosition().lng() == location.lng()){
				existe = true;
				break;
			}
		}
	}
	
	// Se nao estiver adiciona o marker
	if(!existe){
		
		/*var marker = new google.maps.Marker({
			position : location,
			map : map,
			icon : "/images/markers/outros-marker.png",
			shadow : "/images/shadow-marker.png",
			title : nome + ": " + quantidade
		});*/
		
		var marker = new MarkerWithLabel({
			map : map,
			draggable : false,
			flat : true,
			labelContent : uf + " - (" + quantidade + ")",
			labelAnchor : new google.maps.Point(30, 24),
			labelClass : "label",
			labelStyle : {
				opacity : 1
			},
			icon : '/images/markers/listing-state-pin.png',
			position : location
		});
		
		var detalhes = '<div style="font-size:14px;">'
			+ '<p><a href="/imoveis/' + nomeURL + '/">' + nome + '</a></p>'
			+ '<p>' + quantidade + ' imóveis</p>'
			+ '<p><a href="/imoveis/' + nomeURL + '/">ver todos imóveis</a></p>'
			+ '</div>';
		
		
		var infoBubble = new InfoBubble({
          maxWidth: 300,
          minWidth: 150,
          disableAutoPan : true,
          borderRadius: 0
        });
		
		//infoBubble.open(map, marker);
		
        infoBubble.addTab('Detalhes', detalhes);
        
        google.maps.event.addListener(marker, 'click', function() {
            if (!infoBubble.isOpen()) {
            	
            	if (open_info_window)
    				open_info_window.close();
    			if (!infoBubble.isOpen()) {
    				infoBubble.open(map, marker);
    				map.panTo(convert_offset(this.position, x_info_offset, y_info_offset));
    				open_info_window = infoBubble;
    			}
            	
            }
        });

		markersArrayEstados.push(marker);
		infoBubbleArrayEstados.push(infoBubble);
	}
	
	showOverlaysEstados();
}

function addMarkerCidades(cidade) {
	
	var location = new google.maps.LatLng(cidade.lat, cidade.lng);
	var nome = cidade.nome;
	var nomeURL = cidade.nomeURL;
	var estadoUF = cidade.estadoUF;
	var quantidade = cidade.quantidade;
	
	var existe = false;
	//Verifica se o marker ja esta no mapa
	if (markersArrayCidades) {
		for (i in markersArrayCidades) {
			var m = markersArrayCidades[i];
			if(m.getPosition().lat() == location.lat() && m.getPosition().lng() == location.lng()){
				existe = true;
				break;
			}
		}
	}
	
	// Se nao estiver adiciona o marker
	if(!existe){
		
		/*var marker = new google.maps.Marker({
			position : location,
			map : map,
			icon : "/images/markers/outros-marker.png",
			shadow : "/images/shadow-marker.png",
			title : nome + ": " + quantidade
		});*/
		
		if(nome.length > 16){
			nomeStr = nome.split(" ");
			
			nome = "";
			
			for(i=0; i<nomeStr.length; i++){
				if(i<nomeStr.length - 1){
					if(nomeStr[i].substring(0,1) == "A" || nomeStr[i].substring(0,1) == "B" || nomeStr[i].substring(0,1) == "C" || nomeStr[i].substring(0,1) == "D" || nomeStr[i].substring(0,1) == "E" || 
							nomeStr[i].substring(0,1) == "F" || nomeStr[i].substring(0,1) == "G" || nomeStr[i].substring(0,1) == "H" || nomeStr[i].substring(0,1) == "I" || nomeStr[i].substring(0,1) == "J" || 
							nomeStr[i].substring(0,1) == "K" || nomeStr[i].substring(0,1) == "L" || nomeStr[i].substring(0,1) == "M" ||  nomeStr[i].substring(0,1) == "N" || nomeStr[i].substring(0,1) == "O" || 
							nomeStr[i].substring(0,1) == "P" || nomeStr[i].substring(0,1) == "Q" || nomeStr[i].substring(0,1) == "R" || nomeStr[i].substring(0,1) == "S" || nomeStr[i].substring(0,1) == "T" || 
							nomeStr[i].substring(0,1) == "U" || nomeStr[i].substring(0,1) == "V" || nomeStr[i].substring(0,1) == "X" || nomeStr[i].substring(0,1) == "Y" || nomeStr[i].substring(0,1) == "W" || 
							nomeStr[i].substring(0,1) == "Z" ){
						nome += nomeStr[i].substring(0,1) + ". ";
					}else{
						nome += nomeStr[i] + " ";
					}
					
				}else
					nome += nomeStr[i];
			}	
		}
		
		var marker = new MarkerWithLabel({
			map : map,
			draggable : false,
			flat : true,
			labelContent : nome + " (" + quantidade + ")",
			labelAnchor : new google.maps.Point(42, 42),
			labelClass : "labelcity",
			labelStyle : {
				opacity : 1
			},
			icon : '/images/markers/listing-city-pin.png',
			position : location
		});
		
		var detalhes = '<div style="font-size:14px;">'
			+ '<p><a href="/imoveis/' + estadoUF + '/'+nomeURL+'/">' + nome + '</a></p>'
			+ '<p>' + quantidade + ' imóveis</p>'
			+ '<p><a href="/imoveis/' + estadoUF + '/'+nomeURL+'/">ver todos imóveis</a></p>'
			+ '</div>';
		
		
		var infoBubble = new InfoBubble({
          maxWidth: 300,
          minWidth: 150,
          disableAutoPan : true,
          borderRadius: 0
        });
		
		//infoBubble.open(map, marker);
		
        infoBubble.addTab('Detalhes', detalhes);
        
        google.maps.event.addListener(marker, 'click', function() {
            if (!infoBubble.isOpen()) {
            	
            	if (open_info_window)
    				open_info_window.close();
    			if (!infoBubble.isOpen()) {
    				infoBubble.open(map, marker);
    				map.panTo(convert_offset(this.position, x_info_offset, y_info_offset));
    				open_info_window = infoBubble;
    			}
            	
            }
        });

		markersArrayCidades.push(marker);
		infoBubbleArrayCidades.push(infoBubble);
	}
	
	showOverlaysCidades();
}

function adicionarMarkerCategoria(marker, categoria){
	if(categoria == "apartamento"){
		markerApartamento.push(marker);
	}else if(categoria == "box-garagem"){
		markerBoxGaragem.push(marker);
	}else if(categoria == "casa"){
		markerCasa.push(marker);
	}else if(categoria == "casa-comercial"){
		markerCasaComercial.push(marker);
	}else if(categoria == "casa-de-condominio"){
		markerCasaCondominio.push(marker);
	}else if(categoria == "casa-de-vila"){
		markerCasaVila.push(marker);
	}else if(categoria == "chacara"){
		markerChacara.push(marker);
	}else if(categoria == "conjunto-comercial-sala"){
		markerConjuntoComercialSala.push(marker);
	}else if(categoria == "eventos"){
		markerEventos.push(marker);
	}else if(categoria == "fazenda"){
		markerFazenda.push(marker);
	}else if(categoria == "flat-aparthotel"){
		markerFlatAparthotel.push(marker);
	}else if(categoria == "galpao-deposito-armazem"){
		markerGalpaoDepositoArmazem.push(marker);
	}else if(categoria == "haras"){
		markerHaras.push(marker);
	}else if(categoria == "hotel"){
		markerHotel.push(marker);
	}else if(categoria == "industria"){
		markerIndustria.push(marker);
	}else if(categoria == "kitchenette"){
		markerKitchenette.push(marker);
	}else if(categoria == "loft"){
		markerLoft.push(marker);
	}else if(categoria == "loja-salao"){
		markerLojaSalao.push(marker);
	}else if(categoria == "loja-shopping"){
		markerLojaShopping.push(marker);
	}else if(categoria == "loteamento"){
		markerLoteamento.push(marker);
	}else if(categoria == "motel"){
		markerMotel.push(marker);
	}else if(categoria == "pousada-chale"){
		markerPousadaChale.push(marker);
	}else if(categoria == "sitio"){
		markerSitio.push(marker);
	}else if(categoria == "studio"){
		markerStudio.push(marker);
	}else if(categoria == "terreno"){
		markerTerreno.push(marker);
	}
}

function adicionarMarkerIntencao(marker, intencao){
	if(intencao == "aluguel"){
		markerAluguel.push(marker);
	}else if(intencao == "venda"){
		markerVenda.push(marker);
	}else if(intencao == "lancamento"){
		markerLancamento.push(marker);
	}else if(intencao == "temporada"){
		markerTemporada.push(marker);
	}
}

// Removes the overlays from the map, but keeps them in the array
function hideOverlays() {
	if (markersArray) {
		for (i in markersArray) {
			markersArray[i].setMap(null);
		}
	}
}

function hideOverlaysCategoria(categoria) {
	if(categoria == "apartamento"){
		if (markerApartamento) {
			for (i in markerApartamento) {
				markerApartamento[i].setMap(null);
			}
		}
	}else if(categoria == "box-garagem"){
		if (markerBoxGaragem) {
			for (i in markerBoxGaragem) {
				markerBoxGaragem[i].setMap(null);
			}
		}
	}else if(categoria == "casa"){
		if (markerCasa) {
			for (i in markerCasa) {
				markerCasa[i].setMap(null);
			}
		}
	}else if(categoria == "casa-comercial"){
		if (markerCasaComercial) {
			for (i in markerCasaComercial) {
				markerCasaComercial[i].setMap(null);
			}
		}
	}else if(categoria == "casa-de-condominio"){
		if (markerCasaCondominio) {
			for (i in markerCasaCondominio) {
				markerCasaCondominio[i].setMap(null);
			}
		}
	}else if(categoria == "casa-de-vila"){
		if (markerCasaVila) {
			for (i in markerCasaVila) {
				markerCasaVila[i].setMap(null);
			}
		}
	}else if(categoria == "chacara"){
		if (markerChacara) {
			for (i in markerChacara) {
				markerChacara[i].setMap(null);
			}
		}
	}else if(categoria == "conjunto-comercial-sala"){
		if (markerConjuntoComercialSala) {
			for (i in markerConjuntoComercialSala) {
				markerConjuntoComercialSala[i].setMap(null);
			}
		}
	}else if(categoria == "eventos"){
		if (markerEventos) {
			for (i in markerEventos) {
				markerEventos[i].setMap(null);
			}
		}
	}else if(categoria == "fazenda"){
		if (markerFazenda) {
			for (i in markerFazenda) {
				markerFazenda[i].setMap(null);
			}
		}
	}else if(categoria == "flat-aparthotel"){
		if (markerFlatAparthotel) {
			for (i in markerFlatAparthotel) {
				markerFlatAparthotel[i].setMap(null);
			}
		}
	}else if(categoria == "galpao-deposito-armazem"){
		if (markerGalpaoDepositoArmazem) {
			for (i in markerGalpaoDepositoArmazem) {
				markerGalpaoDepositoArmazem[i].setMap(null);
			}
		}
	}else if(categoria == "haras"){
		if (markerHaras) {
			for (i in markerHaras) {
				markerHaras[i].setMap(null);
			}
		}
	}else if(categoria == "hotel"){
		if (markerHotel) {
			for (i in markerHotel) {
				markerHotel[i].setMap(null);
			}
		}
	}else if(categoria == "industria"){
		if (markerIndustria) {
			for (i in markerIndustria) {
				markerIndustria[i].setMap(null);
			}
		}
	}else if(categoria == "kitchenette"){
		if (markerKitchenette) {
			for (i in markerKitchenette) {
				markerKitchenette[i].setMap(null);
			}
		}
	}else if(categoria == "loft"){
		if (markerLoft) {
			for (i in markerLoft) {
				markerLoft[i].setMap(null);
			}
		}
	}else if(categoria == "loja-salao"){
		if (markerLojaSalao) {
			for (i in markerLojaSalao) {
				markerLojaSalao[i].setMap(null);
			}
		}
	}else if(categoria == "loja-shopping"){
		if (markerLojaShopping) {
			for (i in markerLojaShopping) {
				markerLojaShopping[i].setMap(null);
			}
		}
	}else if(categoria == "loteamento"){
		if (markerLoteamento) {
			for (i in markerLoteamento) {
				markerLoteamento[i].setMap(null);
			}
		}
	}else if(categoria == "motel"){
		if (markerMotel) {
			for (i in markerMotel) {
				markerMotel[i].setMap(null);
			}
		}
	}else if(categoria == "pousada-chale"){
		if (markerPousadaChale) {
			for (i in markerPousadaChale) {
				markerPousadaChale[i].setMap(null);
			}
		}
	}else if(categoria == "sitio"){
		if (markerSitio) {
			for (i in markerSitio) {
				markerSitio[i].setMap(null);
			}
		}
	}else if(categoria == "studio"){
		if (markerStudio) {
			for (i in markerStudio) {
				markerStudio[i].setMap(null);
			}
		}
	}else if(categoria == "terreno"){
		if (markerTerreno) {
			for (i in markerTerreno) {
				markerTerreno[i].setMap(null);
			}
		}
	}
}

function hideOverlaysIntencao(intencao){
	if(intencao == "aluguel"){
		if (markerAluguel) {
			for (i in markerAluguel) {
				markerAluguel[i].setMap(null);
			}
		}
	}else if(intencao == "venda"){
		if (markerVenda) {
			for (i in markerVenda) {
				markerVenda[i].setMap(null);
			}
		}
	}else if(intencao == "lancamento"){
		if (markerLancamento) {
			for (i in markerLancamento) {
				markerLancamento[i].setMap(null);
			}
		}
	}else if(intencao == "temporada"){
		if (markerTemporada) {
			for (i in markerTemporada) {
				markerTemporada[i].setMap(null);
			}
		}
	}
}

// Shows any overlays currently in the array
function showOverlays() {
	if (markersArray) {
		for (i in markersArray) {
			markersArray[i].setMap(map);
		}
	}
}

function showOverlaysCategoria(categoria) {
	if(categoria == "apartamento"){
		if (markerApartamento) {
			for (i in markerApartamento) {
				markerApartamento[i].setMap(map);
			}
		}
	}else if(categoria == "box-garagem"){
		if (markerBoxGaragem) {
			for (i in markerBoxGaragem) {
				markerBoxGaragem[i].setMap(map);
			}
		}
	}else if(categoria == "casa"){
		if (markerCasa) {
			for (i in markerCasa) {
				markerCasa[i].setMap(map);
			}
		}
	}else if(categoria == "casa-comercial"){
		if (markerCasaComercial) {
			for (i in markerCasaComercial) {
				markerCasaComercial[i].setMap(map);
			}
		}
	}else if(categoria == "casa-de-condominio"){
		if (markerCasaCondominio) {
			for (i in markerCasaCondominio) {
				markerCasaCondominio[i].setMap(map);
			}
		}
	}else if(categoria == "casa-de-vila"){
		if (markerCasaVila) {
			for (i in markerCasaVila) {
				markerCasaVila[i].setMap(map);
			}
		}
	}else if(categoria == "chacara"){
		if (markerChacara) {
			for (i in markerChacara) {
				markerChacara[i].setMap(map);
			}
		}
	}else if(categoria == "conjunto-comercial-sala"){
		if (markerConjuntoComercialSala) {
			for (i in markerConjuntoComercialSala) {
				markerConjuntoComercialSala[i].setMap(map);
			}
		}
	}else if(categoria == "eventos"){
		if (markerEventos) {
			for (i in markerEventos) {
				markerEventos[i].setMap(map);
			}
		}
	}else if(categoria == "fazenda"){
		if (markerFazenda) {
			for (i in markerFazenda) {
				markerFazenda[i].setMap(map);
			}
		}
	}else if(categoria == "flat-aparthotel"){
		if (markerFlatAparthotel) {
			for (i in markerFlatAparthotel) {
				markerFlatAparthotel[i].setMap(map);
			}
		}
	}else if(categoria == "galpao-deposito-armazem"){
		if (markerGalpaoDepositoArmazem) {
			for (i in markerGalpaoDepositoArmazem) {
				markerGalpaoDepositoArmazem[i].setMap(map);
			}
		}
	}else if(categoria == "haras"){
		if (markerHaras) {
			for (i in markerHaras) {
				markerHaras[i].setMap(map);
			}
		}
	}else if(categoria == "hotel"){
		if (markerHotel) {
			for (i in markerHotel) {
				markerHotel[i].setMap(map);
			}
		}
	}else if(categoria == "industria"){
		if (markerIndustria) {
			for (i in markerIndustria) {
				markerIndustria[i].setMap(map);
			}
		}
	}else if(categoria == "kitchenette"){
		if (markerKitchenette) {
			for (i in markerKitchenette) {
				markerKitchenette[i].setMap(map);
			}
		}
	}else if(categoria == "loft"){
		if (markerLoft) {
			for (i in markerLoft) {
				markerLoft[i].setMap(map);
			}
		}
	}else if(categoria == "loja-salao"){
		if (markerLojaSalao) {
			for (i in markerLojaSalao) {
				markerLojaSalao[i].setMap(map);
			}
		}
	}else if(categoria == "loja-shopping"){
		if (markerLojaShopping) {
			for (i in markerLojaShopping) {
				markerLojaShopping[i].setMap(map);
			}
		}
	}else if(categoria == "loteamento"){
		if (markerLoteamento) {
			for (i in markerLoteamento) {
				markerLoteamento[i].setMap(map);
			}
		}
	}else if(categoria == "motel"){
		if (markerMotel) {
			for (i in markerMotel) {
				markerMotel[i].setMap(map);
			}
		}
	}else if(categoria == "pousada-chale"){
		if (markerPousadaChale) {
			for (i in markerPousadaChale) {
				markerPousadaChale[i].setMap(map);
			}
		}
	}else if(categoria == "sitio"){
		if (markerSitio) {
			for (i in markerSitio) {
				markerSitio[i].setMap(map);
			}
		}
	}else if(categoria == "studio"){
		if (markerStudio) {
			for (i in markerStudio) {
				markerStudio[i].setMap(map);
			}
		}
	}else if(categoria == "terreno"){
		if (markerTerreno) {
			for (i in markerTerreno) {
				markerTerreno[i].setMap(map);
			}
		}
	}
}

function showOverlaysIntencao(intencao){
	if(intencao == "aluguel"){
		if (markerAluguel) {
			for (i in markerAluguel) {
				markerAluguel[i].setMap(map);
			}
		}
	}else if(intencao == "venda"){
		if (markerVenda) {
			for (i in markerVenda) {
				markerVenda[i].setMap(map);
			}
		}
	}else if(intencao == "lancamento"){
		if (markerLancamento) {
			for (i in markerLancamento) {
				markerLancamento[i].setMap(map);
			}
		}
	}else if(intencao == "temporada"){
		if (markerTemporada) {
			for (i in markerTemporada) {
				markerTemporada[i].setMap(map);
			}
		}
	}
}

function showOverlaysEstados() {
	if (markersArrayEstados) {
		for (i in markersArrayEstados) {
			markersArrayEstados[i].setMap(map);
		}
	}
}

function showOverlaysCidades() {
	if (markersArrayCidades) {
		for (i in markersArrayCidades) {
			markersArrayCidades[i].setMap(map);
		}
	}
}

// Deletes all markers in the array by removing references to them
function deleteOverlays() {
	var markerAux = [];
	var infoBubbleAux = [];
	if (markersArray) {
		for (i in markersArray) {
			var m = markersArray[i];
			var b = infoBubbleArray[i];
			
			var mapLeste = map.getBounds().getNorthEast().lat();
			var mapOeste = map.getBounds().getSouthWest().lat();
			var mapNorte = map.getBounds().getNorthEast().lng();
			var mapSul = map.getBounds().getSouthWest().lng();
			
			if(m.getPosition().lat() < mapLeste && m.getPosition().lat() > mapOeste && m.getPosition().lng() > mapSul && m.getPosition().lng() < mapNorte){
				markerAux.push(m);
				infoBubbleAux.push(b);
			}else{
				m.setMap(null);
			}
		}
		markersArray.length = 0;
		infoBubbleArray.length = 0;
	}
	
	markersArray = markerAux;
	infoBubbleArray = infoBubbleAux;
}

function deleteOverlaysEstados() {
	var markerAux = [];
	var infoBubbleAux = [];
	if (markersArrayEstados) {
		for (i in markersArrayEstados) {
			var m = markersArrayEstados[i];
			var b = infoBubbleArrayEstados[i];
			
			var mapLeste = map.getBounds().getNorthEast().lat();
			var mapOeste = map.getBounds().getSouthWest().lat();
			var mapNorte = map.getBounds().getNorthEast().lng();
			var mapSul = map.getBounds().getSouthWest().lng();
			
			if(m.getPosition().lat() < mapLeste && m.getPosition().lat() > mapOeste && m.getPosition().lng() > mapSul && m.getPosition().lng() < mapNorte){
				markerAux.push(m);
				infoBubbleAux.push(b);
			}else{
				m.setMap(null);
			}
		}
		markersArrayEstados.length = 0;
		infoBubbleArrayEstados.length = 0;
	}
	
	markersArrayEstados = markerAux;
	infoBubbleArrayEstados = infoBubbleAux;
}

function deleteOverlaysCidades() {
	var markerAux = [];
	var infoBubbleAux = [];
	if (markersArrayCidades) {
		for (i in markersArrayCidades) {
			var m = markersArrayCidades[i];
			var b = infoBubbleArrayCidades[i];
			
			var mapLeste = map.getBounds().getNorthEast().lat();
			var mapOeste = map.getBounds().getSouthWest().lat();
			var mapNorte = map.getBounds().getNorthEast().lng();
			var mapSul = map.getBounds().getSouthWest().lng();
			
			if(m.getPosition().lat() < mapLeste && m.getPosition().lat() > mapOeste && m.getPosition().lng() > mapSul && m.getPosition().lng() < mapNorte){
				markerAux.push(m);
				infoBubbleAux.push(b);
			}else{
				m.setMap(null);
			}
		}
		markersArrayCidades.length = 0;
		infoBubbleArrayCidades.length = 0;
	}
	
	markersArrayCidades = markerAux;
	infoBubbleArrayCidades = infoBubbleAux;
}

// Deletes all markers in the array by removing references to them
function deleteAllOverlays() {
	if (markersArray) {
		for (i in markersArray) {
			markersArray[i].setMap(null);
		}
		markersArray.length = 0;
	}
	if (infoBubbleArray) {
		for (i in infoBubbleArray) {
			infoBubbleArray[i].setMap(null);
		}
		infoBubbleArray.length = 0;
	}
}

function deleteAllOverlaysEstados() {
	if (markersArrayEstados) {
		for (i in markersArrayEstados) {
			markersArrayEstados[i].setMap(null);
		}
		markersArrayEstados.length = 0;
	}
	if (infoBubbleArrayEstados) {
		for (i in infoBubbleArrayEstados) {
			infoBubbleArrayEstados[i].setMap(null);
		}
		infoBubbleArrayEstados.length = 0;
	}
}

function deleteAllOverlaysCidades() {
	if (markersArrayCidades) {
		for (i in markersArrayCidades) {
			markersArrayCidades[i].setMap(null);
		}
		markersArrayCidades.length = 0;
	}
	if (infoBubbleArrayCidades) {
		for (i in infoBubbleArrayCidades) {
			infoBubbleArrayCidades[i].setMap(null);
		}
		infoBubbleArrayCidades.length = 0;
	}
}

function init_canvas_projection() {
	function CanvasProjectionOverlay() {
	}
	CanvasProjectionOverlay.prototype = new google.maps.OverlayView();
	CanvasProjectionOverlay.prototype.constructor = CanvasProjectionOverlay;
	CanvasProjectionOverlay.prototype.onAdd = function() {
	};
	CanvasProjectionOverlay.prototype.draw = function() {
	};
	CanvasProjectionOverlay.prototype.onRemove = function() {
	};
	canvasProjectionOverlay = new CanvasProjectionOverlay();
	canvasProjectionOverlay.setMap(map);
}

function convert_offset(latlng, x_offset, y_offset) {
	var proj = self.canvasProjectionOverlay.getProjection();
	var point = proj.fromLatLngToContainerPixel(latlng);
	point.x = point.x + x_offset;
	point.y = point.y + y_offset;
	return proj.fromContainerPixelToLatLng(point);
}


